<?php

/**
 * Action-хелпер, предназначенный для перенаправления после сохранения формы
 *
 */
class Wlib_Controller_Action_Helper_FormResultRedirect extends Zend_Controller_Action_Helper_Abstract
{
    protected $_messageKeyPrefix = 'form_result_message_';

    /**
     * Осуществляет перенаправление после сохранения формы
     *
     * Выполняет действия:
     * 1. Считывает соответствующее (form_result_message_*) сообщение из формы и записывает его во FlashMessenger
     * 2. Осуществляет перенаправление согласно параметрам $urlOptions, $name, $reset, с помощью которых роутером
     * составляется uri
     * 
     * @param Wlib_Form_Dojo_DojoBase $form
     * @param array $urlOptions
     * @param string|null $name
     * @param bool $reset
     * @return
     */
    public function direct($form, array $urlOptions = array(), $name = null, $reset = true)
    {
        $keyword = 'add';
        if($form->getMetadataParam('isEditMode', false)) {
            $keyword = 'save';
        }

        $message = '';
        $messageKey = $this->getMessageKeyPrefix() . $keyword;
        if($form->getTranslator()->isTranslated($messageKey)) {
            $message = $form->getTranslator()->translate($messageKey); 
        }

        $this->addMessage($message);
        $this->redirect($urlOptions, $name, $reset);
    }

    public function addMessage($message)
    {
        $this->getActionController()->getHelper('flashMessenger')->addMessage($message);
    }

    public function redirect(array $urlOptions = array(), $name = null, $reset = false)
    {
        $this->getActionController()->getHelper('redirector')->gotoRouteAndExit($urlOptions, $name, $reset);
    }
    
    /**
     * Извлекает сообещения, установленные ранее
     *
     * @return array
     */
    public function getMessages()
    {
        return $this->getActionController()->getHelper('flashMessenger')->getMessages();
    }

    public function getMessageKeyPrefix()
    {
        return $this->_messageKeyPrefix;
    }

    public function setMessageKeyPrefix($messageKeyPrefix)
    {
        $this->_messageKeyPrefix = $messageKeyPrefix;
        return $this;
    }
}